module AutenticacaoHelper
  def usuario(metodo = nil)
    @usuario ||= session[:usuario]
    if metodo and @usuario
      if metodo.to_s.match(/servidor_/)
        @usuario.servidor.send(metodo.to_s.gsub('servidor_','')) if @usuario.servidor
      else
        @usuario.send(metodo)
      end
    else
      @usuario
    end
  end

  def usuario_nome
    return params[:usuario][:nome] if params[:usuario]
    usuario(:nome)
  end

  def perfis
    usuario ? perfis_to_link : "PÚBLICO"
  end

  def perfis_to_link
    (@usuario.perfis.collect { |perfil| link_to(perfil.to_s.upcase, :controller => '/autenticacao', :action => :perfil, :id => perfil.to_s) }).join '/'
  end

  def existe_arquivo_opcoes_perfil?(perfil)
    File.exist? "#{RAILS_ROOT}/app/views/layouts/_opcoes_#{perfil}.rhtml"
  end

  def render_arquivo_opcoes_perfil
    if session[:usuario] and session[:perfil]
      arquivo = "layouts/opcoes_#{session[:perfil]}" 
      render :partial => arquivo if existe_arquivo_opcoes_perfil? session[:perfil]
    end
  end

  # == Funções para HTML
  def error_messages_for_usuario
    erros = error_messages_for :usuario, :object_name => 'a autenticação do usuário', :id => nil, :class => nil
    render :partial => 'layouts/message', :inline => { :message => ((erros.empty?)? nil : erros), :type => :warning } unless erros.empty?
  end

  def informacoes_usuario
    if usuario.senha.instance_of?(Digest::MD5) and usuario.nome 
      "<small>#{usuario(:nome).upcase} - #{usuario(:servidor_nome)}</small>"
    else
      "<small style=\"font-size: 90%; font-weight: bold;\">" + RAILS_ENV.upcase + "</small>"
    end
  end
end